/*
 * 版权所有 (C) 2021 中国南方航空股份有限公司。
 * 本文件可能包含有南方航空公司的机密或专有信息。
 * 未经许可不得擅自公开、复制这些机密资料及其中任何部分，
 * 只可按照其使用许可协议，在南方航空公司内部使用。
 *
 * File Name: $(#)Demo.java
 * Creation Date: 2021年11月30日 上午9:30:29
 * $Id$
 */
package com.andy.note.main.concurrent.function;

import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
import java.util.function.UnaryOperator;

/**
 * 关于function 包的demo
 * 参考： https://blog.csdn.net/a879611951/article/details/80104014
 *
 * @author zhouguoan 908119428@qq.com
 * @version $Revision: 1.1 $ $Date: 2021年11月30日 上午9:30:29 $
 */
public class FunctionPackageDemo {

    public static void main(String[] args) {
        // 获取当前计算机的核心线程数
        System.out.println(Runtime.getRuntime().availableProcessors()); // 8
        
        // Function<T, R>  T：入参类型，R：出参类型
        Function<String, String> fun = f -> "this is: " + f;
        System.out.println(fun.apply("function")); // this is: function
        
        // Consumer<T> T：入参类型；没有出参
        Consumer<Integer> con = i -> System.out.println(i * i);
        con.accept(9); // 81
        
        // Supplier<T> T：出参类型；没有入参
        Supplier<Integer> sup = () -> 8 * 8;
        System.out.println(sup.get()); // 16
        
        // Predicate<T> T：入参类型；出参类型是Boolean
        Predicate<Integer> pre = p -> p % 2 == 0;
        System.out.println(pre.test(10)); // true
        
        // UnaryOperator<T> T: 入参和返回一致
        UnaryOperator<String> una = u -> "unaryOperator is: " + u;
        System.out.println(una.apply("good job!")); // unaryOperator is: good job!
        
    }

}
